import axios from 'axios';
import dayjs from "./dayjs";

// 创建 axios 实例
const service = axios.create({
    // 配置统一的后台地址，替换成你的实际地址
    // 请求超时时间
    baseURL: process.env.VUE_APP_API_BASE,
    timeout: 5000
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 可在此处添加通用请求头，例如 token
        // if (localStorage.getItem('token')) {
        //     config.headers['Authorization'] = `Bearer ${localStorage.getItem('token')}`;
        // }
        if (config.params){
            config.params = formatDatesToUTC(config.params);
        }
        if (config.data){
            config.data = formatDatesToUTC(config.data);
        }
        return config;
    },
    error => {
        console.log(error);
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 对响应数据进行统一处理
        if (response.data){
            response.data = formatDatesToLocal(response.data);
        }
        return response.data;
    },
    error => {
        console.log('err' + error);
        return Promise.reject(error);
    }
);

// 递归函数，将对象中的日期时间转换为 UTC
function formatDatesToUTC(data) {
    console.log('v1',data);
    console.log('v2',isValidDate(data));

    if (typeof data === 'string' && isValidDate(data)) {
        return dayjs(data).utc().format('YYYY-MM-DD HH:mm:ss');
    } else if (Array.isArray(data)) {
        return data.map(item => formatDatesToUTC(item));
    } else if (typeof data === 'object' && data !== null) {
        const newData = {};
        for (const key in data) {
            newData[key] = formatDatesToUTC(data[key]);
        }
        return newData;
    }
    return data;
}

// 递归函数，将对象中的日期时间转换为本地时区
function formatDatesToLocal(data) {
    if (typeof data === 'string' && isValidDate(data)) {
        return dayjs.utc(data).local().format('YYYY-MM-DD HH:mm:ss');
    } else if (Array.isArray(data)) {
        return data.map(item => formatDatesToLocal(item));
    } else if (typeof data === 'object' && data !== null) {
        const newData = {};
        for (const key in data) {
            newData[key] = formatDatesToLocal(data[key]);
        }
        return newData;
    }
    return data;
}

// 验证字符串是否为有效的日期时间
function isValidDate(dateString) {
    return isValid1(dateString)||isValid2(dateString);
}

function isValid1(str){
    const regex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
    return regex.test(str);
}

function isValid2(str){
    const regex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;
    return regex.test(str);
}

export default service;
